package com.demo.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import jakarta.validation.constraints.*;

import java.io.Serializable;
import java.util.Date;

/**
 * (Goods)
 *
 * @author why
 * @since 2025-05-20 14:46:01
 */
@Data
@TableName("goods")
public class Goods implements Serializable {

    private static final long serialVersionUID = 658313031442680438L;

    /**
     * 商品唯一标识符
     **/
    @TableId(type = IdType.AUTO)
    private Long productId;

    /**
     * 商品名称
     **/
    @NotBlank(message = "商品名称不能为空")
    @Size(max = 100, message = "商品名称长度不能超过100个字符")
    private String productName;

    /**
     * 商品分类
     **/
    @NotBlank(message = "商品分类不能为空")
    @Size(max = 50, message = "商品分类长度不能超过50个字符")
    private String productCategory;

    /**
     * 商品价格，保留两位小数
     **/
    @NotNull(message = "商品价格不能为空")
    @DecimalMin(value = "0.01", message = "商品价格必须大于0")
    @Digits(integer = 10, fraction = 2, message = "商品价格格式不正确，最多10位整数2位小数")
    private Double price;

    /**
     * 商品库存数量
     **/
    @NotNull(message = "库存数量不能为空")
    @Min(value = 0, message = "库存数量不能为负数")
    private Integer stockQuantity;

    /**
     * 商品描述，简要介绍商品的特点、用途等
     **/
    @Size(max = 500, message = "商品描述长度不能超过500个字符")
    private String description;

    /**
     * 商品品牌
     **/
    @Size(max = 50, message = "商品品牌长度不能超过50个字符")
    private String brand;

    /**
     * 商品重量，单位为千克
     **/
    private Double weight;

    /**
     * 商品尺寸，格式如“长x宽x高”
     **/
    private String dimensions;

    /**
     * 商品颜色
     **/
    private String color;

    /**
     * 商品图片URL链接
     **/
    private String imageUrl;

    /**
     * 是否销售
     **/
    @TableField(fill = FieldFill.INSERT)
    private String isSale;

    /**
     * 是否推荐
     **/
    @TableField(fill = FieldFill.INSERT)
    private String isRecommend;

    /**
     * 商品记录创建时间
     **/
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 商品记录最后更新时间
     **/
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 获取商品名称的便捷方法
     * @return 商品名称
     */
    public String getName() {
        return this.productName;
    }

    /**
     * 获取商品ID的便捷方法
     * @return 商品ID
     */
    public Long getId() {
        return this.productId;
    }
}



